共计 557 个字符,预计需要花费 2 分钟才能阅读完成。
基本概念
命名空间指的是变量存储的位置,每一个变量都需要存储到指定的命名空间当中。每一个作用域都会有一个对应的命名空间。
全局命名空间,用来保存全局变量,函数命名空间用来保存函数中的变量。
命名空间实际上就是一个字典,是一个专门用来存储变量的字典。
使用及示例
locals() 用来获取当前作用域的命名空间。如果在全局作用域中调用 locals() 则获取全局命名空间,如果在函数作用域中调用 locals() 则获取函数命名空间,返回的是一个字典。
globals() 用来在任意位置获取全局命名空间。
scope = locals() # h 获取当前作用域的命名空间
print(scope)
scope['a'] = 100 # 相当于在全局中创建了 a 变量
print(scope)
def fn():
a = 10
scope = locals() # 获取函数的命名空间
print(scope) # {'a': 10}
fn()
print(globals()) # 在任意位置获取全局命名空间
LEGB 规则
Python 在查找“名称”时,是按照 LEGB 规则查找的:Local→Enclosed→Global→Built in
- Local 指函数或者类的方法内部
- Enclosed 指嵌套函数 (一个函数包裹另一个函数,闭包)
- Global 指模块中全局变量
- Buit in 指 Python 为自己保留的特殊名称
正文完